// 在安装时初始化上下文菜单
chrome.runtime.onInstalled.addListener(() => {
  // 创建右键菜单项
  chrome.contextMenus.create({
    id: "capturePrompt",
    title: "保存为提示词",
    contexts: ["selection"]
  });
});

// 处理右键菜单点击事件
chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "capturePrompt") {
    // 打开扩展的弹出窗口
    chrome.action.openPopup();
    
    // 将选中的文本发送到扩展
    setTimeout(() => {
      chrome.runtime.sendMessage({
        action: "fillSelectedText",
        text: info.selectionText
      });
    }, 300); // 给弹出窗口一点时间加载
  }
});

// 使用本地向量数据库模拟实现
// 在实际应用中，你可以使用 localforage、idb-keyval 等库来实现
let vectorDB = {
  // 使用余弦相似度计算向量相似度
  cosineSimilarity: (vecA, vecB) => {
    let dotProduct = 0;
    let normA = 0;
    let normB = 0;
    
    for (let i = 0; i < vecA.length; i++) {
      dotProduct += vecA[i] * vecB[i];
      normA += vecA[i] * vecA[i];
      normB += vecB[i] * vecB[i];
    }
    
    return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
  },
  
  // 搜索相似的提示词
  searchSimilar: (vector, allPrompts, topK = 5) => {
    // 计算每个提示词向量与查询向量的相似度
    const similarities = allPrompts
      .filter(prompt => prompt.vector && prompt.vector.length > 0)
      .map(prompt => ({
        prompt,
        similarity: vectorDB.cosineSimilarity(vector, prompt.vector)
      }))
      .sort((a, b) => b.similarity - a.similarity)
      .slice(0, topK)
      .map(item => item.prompt);
    
    return similarities;
  }
};

// 监听消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === "findSimilarPrompts") {
    chrome.storage.local.get('prompts', (result) => {
      if (result.prompts && result.prompts.length > 0) {
        const similarPrompts = vectorDB.searchSimilar(request.vector, result.prompts);
        sendResponse({ similarPrompts });
      } else {
        sendResponse({ similarPrompts: [] });
      }
    });
    return true; // 保持消息通道开放以进行异步响应
  }
}); 